﻿using System;

namespace PomodoroSuite.FW.Comun
{
    /// <summary>
    /// Enumerador que maneja el estado de una entidad de negocio
    /// </summary>
    [Serializable]
    public enum EstadoEntidad
    {
        Nuevo,
        Modificado,
        Eliminado,
        Ninguno
    }

    /// <summary>
    /// Clase que contiene información para el manejo de Entidades de Negocio (Business Objects)
    /// </summary>
    [Serializable]
    public class BOGenerico
    {
        public BOGenerico()
        { }

        public EstadoEntidad EstadoBD { get; set; }

        public T Clone<T>()
        {
            return (T)this.MemberwiseClone();
        }

        ///// <summary>
        ///// Obtiene un listado de objetos.
        ///// </summary>
        ///// <typeparam name="T"></typeparam>
        ///// <param name="idTablaPrimaria">Nombre del campo id de la tabla primaria (Ejm: IdPersona)</param>
        ///// <param name="valorId">Valor del ID</param>
        ///// <returns></returns>
        //protected List<T> ObtenerLista<T>(string nombreIdTablaPrimaria, int valorId)
        //{
        //    List<T> entidadesDevueltas = new List<T>();
        //    List<Filtro> filtros = new List<Filtro>();

        //    filtros.Add(new Filtro(nombreIdTablaPrimaria, valorId));
        //    ObjectHandle dalWrapper = Activator.CreateComInstanceFrom(ConfigurationManager.AppSettings["BinPath"] + "\\AccesoDatos.dll", "AccesoDatos.Dal" + typeof(T).Name);

        //    MethodInfo metodo = dalWrapper.Unwrap().GetType().GetMethod("ObtenerListadoFiltrado");
        //    entidadesDevueltas = (List<T>)metodo.Invoke(dalWrapper.Unwrap(), new object[] { filtros });

        //    return entidadesDevueltas;
        //}

        ///// <summary>
        ///// Obtiene un objeto
        ///// </summary>
        ///// <typeparam name="T"></typeparam>
        ///// <param name="idTabla"></param>
        ///// <param name="valorId"></param>
        ///// <returns></returns>
        //protected T ObtenerObjeto<T>(string nombreIdTabla, int valorId)
        //{
        //    List<T> entidadesDevueltas = new List<T>();
        //    List<Filtro> filtros = new List<Filtro>();

        //    filtros.Add(new Filtro(nombreIdTabla, valorId));
        //    ObjectHandle dalWrapper = Activator.CreateComInstanceFrom(ConfigurationManager.AppSettings["BinPath"] + "\\AccesoDatos.dll", "AccesoDatos.Dal" + typeof(T).Name);

        //    MethodInfo metodo = dalWrapper.Unwrap().GetType().GetMethod("ObtenerListadoFiltrado");
        //    entidadesDevueltas = (List<T>)metodo.Invoke(dalWrapper.Unwrap(), new object[] { filtros });

        //    if (entidadesDevueltas.Count > 0)
        //        return entidadesDevueltas[0];
        //    else
        //        return default(T);
        //}
    }
}
